package jp.fsoriented.toishi;

import jp.fsoriented.toishi.data.BibleConstant;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.actionbarsherlock.app.SherlockActivity;

/**
 * 聖書の訳、書簡、章、節の選択を行うダイアログ風アクティビティ。 何の選択、選択要素についての指定はインテントにて指定する。
 * 結果はEXTRA_RESULT_WHICHで返す。また、resultも設定する。
 * 
 * マニフェストにandroid:theme="@android:style/Theme.Dialog"を追加すること。
 */
public class ItemSelectDialog extends SherlockActivity implements AdapterView.OnItemClickListener {

	public static final String INTENT_PARAM_MODE = "mode";
	public static final String INTENT_PARAM_COUNT = "count";
	public static final String INTENT_PARAM_VISIBLE_INDEX = "visibleIndex";
	public static final String INTENT_RESULT_WHICH = "resultWhich";
	public static final int MODE_NONE = 0;
	public static final int MODE_BOOK = 2;
	public static final int MODE_CHAPTER = 3;
	public static final int MODE_VERSE = 4;

	/**
	 * このダイアログを開く
	 * 
	 * @param act 結果を受け取るアクティビティ
	 * @param mode モード(MODE_BOOK/MODE_CHAPTER/MODE_VERSE)
	 * @param count モードが章・節の場合、選択肢の数
	 * @param visibleIndex 見える位置
	 * @param requestCode 結果を受け取るときに使うID
	 */
	public static void start(Activity act, int mode, int count, int visibleIndex, int requestCode) {
		Intent intent = new Intent();
		intent.setClass(act, ItemSelectDialog.class);
		intent.putExtra(INTENT_PARAM_MODE, mode);
		intent.putExtra(INTENT_PARAM_COUNT, count);
		intent.putExtra(INTENT_PARAM_VISIBLE_INDEX, visibleIndex);
		act.startActivityForResult(intent, requestCode);
	}

	/**
	 * アクティビティの生成処理：ビューの生成と表示要素の生成
	 * 
	 */
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		Intent incoming = getIntent();
		int mode = incoming.getIntExtra(INTENT_PARAM_MODE, MODE_NONE);
		int count = incoming.getIntExtra(INTENT_PARAM_COUNT, 0);
		int visible = incoming.getIntExtra(INTENT_PARAM_VISIBLE_INDEX, 0);

		switch (mode) {
		case MODE_VERSE:
			createSelectVerseView(count, visible);
			break;
		case MODE_CHAPTER:
			createSelectChapterView(count, visible);
			break;
		case MODE_BOOK:
			createSelectBookView(visible);
			break;
		}

		setResult(RESULT_CANCELED);

	}

	/**
	 * 節選択ビューの生成
	 * 
	 * @param count
	 * @param visible
	 * @return
	 */
	private void createSelectVerseView(int count, int visible) {
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
		for (int i = 1; i <= count; i++) {
			adapter.add(i + "節");
		}
		createCommonView(R.string.main_select_verse, adapter, visible);
	}

	/**
	 * 章選択ビューの生成
	 * 
	 * @param count
	 * @param visible
	 * @return
	 */
	private void createSelectChapterView(int count, int visible) {
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
		for (int i = 1; i <= count; i++) {
			adapter.add(i + "章");
		}
		createCommonView(R.string.main_select_chapter, adapter, visible);
	}

	/**
	 * 書簡選択ビューの生成
	 * 
	 * @param version
	 * @param visible
	 * @return
	 */
	private void createSelectBookView(int visible) {
		String[] titles = BibleConstant.getBookNames();
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
		for (int i = 0; i < titles.length; i++) {
			adapter.add(titles[i]);
		}
		createCommonView(R.string.main_select_book, adapter, visible);
	}

	/**
	 * 共通のビュー生成メソッド
	 * 
	 * @param titleString
	 * @param adapter
	 * @param visible
	 */
	private void createCommonView(int titleString, ArrayAdapter<String> adapter, int visible) {
		setContentView(R.layout.dialog_item_select);
		setTitle(titleString);
		ListView list = (ListView) findViewById(R.id.dialog_item_select_list);
		list.setAdapter(adapter);
		list.setFastScrollEnabled(true);
		list.setSelectionFromTop(visible, 0);
		list.setOnItemClickListener(this);
	}

	/**
	 * リストの要素クリックのリスナ
	 */
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		Intent intent = new Intent();
		intent.putExtra(INTENT_RESULT_WHICH, position);
		setResult(RESULT_OK, intent);
		finish();
	}

	/**
	 * 閉じるボタンクリック
	 */
	public void onCloseClick(View v) {
		finish();
	}

}
